

// 你不需要创建StreamControllers.
// 你不需要为每个变量创建一个StreamBuilder。
// 你不需要为每个状态创建一个类。
// 你不需要为一个初始值创建一个get。
// 使用 Get 的响应式编程就像使用 setState 一样简单。


// 定义Obx变量的三种方式
// 第一种 使用 Rx{Type}
// final name = RxString('');
// final isLogged = RxBool(false);
// final count = RxInt(0);
// final balance = RxDouble(0.0);
// final items = RxList<String>([]);
// final myMap = RxMap<String, int>({});

// 第二种是使用 Rx，规定泛型 Rx<Type>。
// final name = Rx<String>('');
// final isLogged = Rx<Bool>(false);
// final count = Rx<Int>(0);
// final balance = Rx<Double>(0.0);
// final number = Rx<Num>(0)
// final items = Rx<List<String>>([]);
// final myMap = Rx<Map<String, int>>({});
// 自定义类 - 可以是任何类
// final user = Rx<User>();

// 第三种更实用、更简单、更可取的方法，只需添加 .obs 作为value的属性。
// final name = ''.obs;
// final isLogged = false.obs;
// final count = 0.obs;
// final balance = 0.0.obs;
// final number = 0.obs;
// final items = <String>[].obs;
// final myMap = <String, int>{}.obs;
// 自定义类 - 可以是任何类
// final user = User().obs;

import 'package:flutter/material.dart';
import 'package:getx/custom/customappbar.dart';

// ignore: import_of_legacy_library_into_null_safe
import 'package:get/get.dart';
import 'package:getx/model/obx.dart';

// ignore: must_be_immutable
class ObxGetX extends StatefulWidget {
  String name;
  ObxGetX({Key? key, required this.name}) : super(key: key);
  @override
  _CountGetXState createState() => _CountGetXState();
}

class _CountGetXState extends State<ObxGetX> {
  RxInt count = RxInt(0);
  // var count = Rx<double>(0);
  // var count = 0.obs;

  void increment() {
    count++;
  }
  void decrement() {
    count--;
  }
  var teacher = Teacher();
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: CustomAppbar(widget.name, Theme.of(context).primaryColor),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Obx(
              () => Text(
                "count的值为: $count",
                style: const TextStyle(color: Colors.red, fontSize: 30),
              ),
            ),
            const SizedBox(
              height: 20,
            ),
            ElevatedButton(
              onPressed: () {
                increment();
              },
              child: const Text("点我加1"),
            ),
            const SizedBox(
              height: 20,
            ),
            ElevatedButton(
              onPressed: () {
                decrement();
              },
              child: const Text("点我减1"),
            ),

            Obx(() => Text(
              "我的名字是 ${teacher.name.value}",
              style:const  TextStyle(color: Colors.red, fontSize: 30),
            )),
            const SizedBox(height: 20,),
            ElevatedButton(
              onPressed: () {
                teacher.name.value = teacher.name.value.toUpperCase();
                // teacher.update((val) {
                //   teacher.value.name = teacher.value.name.toString().toUpperCase();
                // });
              },
              child: const Text("转换为大写"))
          ],
        ),
      ),
    );
  }
}
